package random;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;

public class Class20 {

    //TODO:2023/12/20这段代码是Java中的双括号初始化（Double Brace Initialization）
    // 语法的一种使用方式。在这里，使用了匿名内部类的方式创建了一个HashMap的实例，并使用实例初始化块来添加键值对。

    //TODO:2023/12/20  有效括号这一类的题目充分利用了栈的特点   左括号一直入栈 遇到右括号就判断是不是和入栈的栈顶元素是一对的
    // 是的话 继续循环下一个括号不是的话直接返回false
        private static final Map<Character,Character> map = new HashMap<Character,Character>(){{
            put('{','}');
            put('[',']');
            put('(',')');
            put('?','?');
        }};

        public boolean isValid(String s) {
            if(s.length() > 0 && !map.containsKey(s.charAt(0))) return false;
            LinkedList<Character> stack = new LinkedList<Character>() {{ add('?'); }};
            for(Character c : s.toCharArray()){
                if(map.containsKey(c)) stack.addLast(c);
                else if(map.get(stack.removeLast()) != c) return false;
            }
            return stack.size() == 1;
        }



    public boolean isValid1(String s) {
        HashMap map=new HashMap<Character,Character>();
        map.put('(',')');
        map.put('[',']');
        map.put('{','}');

        if(s.length()>0&&!map.containsKey(s.charAt(0))){
            return false;
        }
        LinkedList<Character> stack= new LinkedList<>();
        stack.addLast('?');
        for(Character c:s.toCharArray()){
            if(map.containsKey(c)){
                stack.addLast(c);
            }
            else if(map.get(stack.removeLast()) != c) return false;
            // else if(map.get(stack.removeLast())!=c){
            //     return false;
            // }
        }
        if(stack.size()==1){
            return  true;
        }
        return false;
    }

    public static void main(String[] args) {
        Class20 class20 = new Class20();
        System.out.println(class20.isValid1("(){}}{{}"));



    }







}
